package ${packageStr};

import com.differ.jackyun.framework.component.basic.dto.PageInfo;
import com.differ.jackyun.frame.business.dto.left.LeftTypeCountDTO;
import com.differ.jackyun.frame.businesscommondb.dao.ICommonDataDao;
import com.differ.jackyun.framework.component.basic.member.member.MemberInfo;
import ${filterPackageStr}.${filterName};
import ${filterPackageStr}.${resultName};
import ${entityPackageStr}.${entityClassName};
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
* ${entityDesc} - DAO
*
* @author ${author}
* @since  ${time}
*/
public interface ${className} extends ICommonDataDao<${filterName}, ${entityClassName}, ${resultName}> {

    /**
     * 批量新增
     *
     * @param entityList 实体数组
     * @return 成功数
     */
    @Override
    Integer batchAdd(@Param("entityList") List<${entityClassName}> entityList);

    /**
     * 批量更新
     *
     * @param entityList 实体数组
     * @param memberInfo 对应吉客号信息
     * @return 成功数
     */
    @Override
    Integer batchUpdate(@Param("entityList") List<${entityClassName}> entityList, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量更新 - 重复数据
     * 描述：重复数据传一个实体就行
     *
     * @param ids        待更新ids
     * @param entity     待更新实体
     * @param memberInfo 吉客号信息
     * @return 成功数
     * @author LiYuan
     * @date 2020/9/3 16:11
     */
     @Override
     Integer batchUpdateSingle(@Param("ids") Long[] ids, @Param("item") ${entityClassName} entity, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量逻辑删除
     *
     * @param ids 主键数组
     * @param memberInfo 对应吉客号信息
     * @return 成功数
     */
    @Override
    Integer batchLogicDelete(@Param("ids") Long[] ids, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量删除
     *
     * @param ids 主键数组
     * @param memberInfo 对应吉客号信息
     * @return 成功数
     */
    @Override
    Integer batchDelete(@Param("ids") Long[] ids, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量获取
     *
     * @param ids 主键数组
     * @param memberInfo 对应吉客号信息
     * @return 实体数组
     */
    @Override
    List<${entityClassName}> list(@Param("ids") Long[] ids, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量根据条件获取实体
     *
     * @param filter     过滤条件
     * @param memberInfo 对应吉客号信息
     * @return 实体List
     */
    @Override
    List<${entityClassName}> listByFilter(@Param("filter") ${filterName} filter, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 批量根据条件获取实体
     *
     * @param filter     过滤条件
     * @param memberInfo 对应吉客号信息
     * @return 实体List
     */
    @Override
    Integer countByFilter(@Param("filter") ${filterName} filter, @Param("memberInfo") MemberInfo memberInfo);

    /**
     * 获取主页面信息
     *
     * @param filter     过滤条件
     * @param pageInfo   分页信息
     * @param memberInfo 对应吉客号信息
     * @return 实体List
     */
    @Override
    List<${resultName}> listMain(@Param("filter") ${filterName} filter, @Param("pageInfo") PageInfo pageInfo, @Param("memberInfo") MemberInfo memberInfo);

     /**
      * 查询主页面数量
      *
      * @param filter     过滤条件
      * @param memberInfo 对应吉客号信息
      * @return 数量
      */
     @Override
     Integer listCount(@Param("filter") ${filterName} filter, @Param("memberInfo") MemberInfo memberInfo);

     /**
      * 获取最大的no

      * @param memberInfo 对应吉客号信息*
      * @return 最大no
      */
     @Override
     Integer getMaxNo(@Param("memberInfo") MemberInfo memberInfo);

     /**
      * 统计字段的数量
      *
      * @param fields     归类字段
      * @param filter    过滤条件
      * @param memberInfo 对应吉客号信息
      * @return 字段的数量
      */
     @Override
     List<LeftTypeCountDTO> listFieldCount(@Param("fields") String[] fields, @Param("filter") ${filterName} filter, @Param("memberInfo") MemberInfo memberInfo);
}